package main

import (
	"errors"
	"fmt"
)

// "gitee.com/mad-wud/lin"
func 创建单组件环境(组件英文名, 组件中文名 string) error {
	if err := 添加goworke基础(组件英文名, 组件中文名); err != nil {
		fmt.Println(err)
		return err
	}

	if err := 修改路由内容(组件英文名, 组件中文名); err != nil {
		fmt.Println(err)
		return err
	}

	if err := 创建vue组件(组件英文名, 组件中文名); err != nil {
		fmt.Println(err)
		return err
	}

	if err := 改vue组件index(组件英文名, 组件中文名); err != nil {
		fmt.Println(err)
		return err
	}
	if err := 改main点go(组件英文名, 组件中文名); err != nil {
		fmt.Println(err)
		return err
	}

	return nil
}

func 添加goworke基础(组件英文名, 组件中文名 string) error {
	基础数据 := `<template>
	基础待设计
</template>
<script setup>

</script>
<style lang="scss"  scoped>

</style>`
	vue组件文件路径 := 全_文本.C创建文本("./{1}.vue", 组件中文名)
	存在 := 全_文件.P判断文件_是否存在(vue组件文件路径)
	if 存在 {
		错误 := errors.New(组件中文名 + ".vue组件已经存在")
		return 错误
	}

	全_文件.X写到_文件(vue组件文件路径, []byte(基础数据))

	基础数据 = `package main

	import (
		"gitee.com/mad-wud/lin"
	)
	
	var {1}_基础 = "<template> 基础待设计 </template><script setup></script><style lang='scss'  scoped></style>"
	
	func {1}(表 lin.J键值表) (vue string, 错误 error) {
		基础vue := {1}_基础
		属性表 := 表.QJ取键值表("属性")
		文件路径 := 全_文件.QX取运行目录() + "/{1}.vue"
	
		属性 := 属性生成(属性表)
		属性 = 全_文本.T替换文本(属性, " icon=", " :icon=", -1)
	
		样式 := ""
		js := ""
		if 属性表.QW取文本("icon") != "" {
			js="import { " + 属性表.QW取文本("icon")+" }  from '@element-plus/icons-vue' //更多图标官方文档 改变引用和:icon 对应值即可 \r\n" + js
		}
	
		基础vue = 全_文本.C创建文本(基础vue, 属性, 样式, js)
		return 基础vue, 全_文件.X写到_文件(文件路径, []byte(基础vue))
	
	}`
	基础数据 = 全_文本.C创建文本(基础数据, 组件中文名)

	go文件路径 := 全_文本.C创建文本("./{1}_法.go", 组件中文名)
	存在 = 全_文件.P判断文件_是否存在(go文件路径)
	if 存在 {
		错误 := errors.New(组件中文名 + "_法.go 文件已经存在")
		return 错误
	}

	return 全_文件.X写到_文件(go文件路径, []byte(基础数据))
}

func 修改路由内容(组件英文名, 组件中文名 string) error {
	基础数据 := `,{
		path: '/{1}',
		name: '{1}',
		component: () => import('../components/TemplateLibrary/library/{1}/{2}.vue')
	},{
		path: '/go{1}',
		name: 'go{1}',
		component: () => import('../components/gowork/{2}.vue')
	}`
	文件路径 := "../../router/index.js"
	基础数据 = 全_文本.C创建文本(基础数据, 组件英文名, 组件中文名)
	数据, err := 全_文件.D读入_文件(文件路径)
	if err != nil {
		return err
	}
	路由js := string(数据)
	路由js = 全_文本.T替换文本(路由js, "//{1}", 基础数据+"//{1}", 1)
	return 全_文件.X写到_文件(文件路径, []byte(路由js))

}

func 创建vue组件(组件英文名, 组件中文名 string) error {
	文件路径 := 全_文本.C创建文本("../TemplateLibrary/library/{1}/{2}.vue", 组件英文名, 组件中文名)
	存在 := 全_文件.P判断文件_是否存在(文件路径)
	if 存在 {
		错误 := errors.New(文件路径 + " 文件已经存在")
		return 错误
	}
	err := 全_文件.C创建目录(全_文本.C创建文本("../TemplateLibrary/library/{1}", 组件英文名))
	if err != nil {
		return err
	}

	基础数据 := `<template>
    <div style="display: flex;width: 100%;height: 100vh; background-color: black;">
        <!-- 左边 -->
        <div style="width: 50%;background-color: rgb(160, 178, 194); text-align: center;height: 99%;">
            <W网页和代码基础 :代码="代码" :访问路径="访问路径"  :组件名="组件名"/>
        </div>
        <!-- 右边 -->
        <div style="width: 50%;background-color: rgba(25, 8, 36, 0.521);color: aliceblue; min-height: 100%;">
            <!-- 组件名 -->
            <div style="display:flex ;">
                <h1
                    style="margin-top: 10px;margin-left: 30px;width: 180px;text-align: center;background-color:rgb(240, 20, 31);">
                    {{ 组件名 }}</h1>
                <el-button size="small" style="margin-top: 20px;margin-left: 30px;" @click="组件修改">刷新组件</el-button>
            </div>
            <div style="height: 90%;">
                <!-- 属性 -->
                <el-scrollbar height="100%">
                </el-scrollbar>

            </div>
        </div>

    </div>
</template>
<script setup>
import W网页和代码基础 from "../网页和代码基础.vue"
import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue'
import { ElMessage, formItemContextKey, ElMessageBox } from 'element-plus'
import { ref, reactive, getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance();
const 路由 = proxy.router
const 库 = proxy.lib
const API = proxy.API
const 组件名 = ref('{2}')
const 属性 = ref({
})

const 样式1 = ref('display: flex;margin-top: 10px;margin-left: 10px;font-size: 14px;')
const 样式2 = ref('color:rgb(190, 161, 161);font-size: 10px;margin-left: 10px;')



const 代码 = ref('')
const 访问路径 = ref('http://localhost:3000/#/go{1}')

const 组件修改 = async () => {
	访问路径.value = ""
    let 结果 = await API.组件修改(组件名.value, 属性.value, "", "")
    if (结果.err == 'ok') {
        代码.value = 结果.msg
        访问路径.value = 结果.url
        console.log("访问路径", 访问路径.value)
        ElMessage.success("修改成功")
    } else {
        访问路径.value = 结果.url
        ElMessage.error("错误:" + 结果.err)
    }

}

</script>
<style lang="scss"  scoped>
h4 {
    background-color: rgb(65, 104, 75);
    text-align: center;
}
</style>
`
	基础数据 = 全_文本.C创建文本(基础数据, 组件英文名, 组件中文名)
	return 全_文件.X写到_文件(文件路径, []byte(基础数据))

}

func 改vue组件index(组件英文名, 组件中文名 string) error {
	文件路径 := "../TemplateLibrary/index.vue"
	存在 := 全_文件.P判断文件_是否存在(文件路径)
	if !存在 {
		错误 := errors.New(文件路径 + " 文件不存在")
		return 错误
	}
	数据, err := 全_文件.D读入_文件(文件路径)
	if err != nil {
		return err
	}

	基础数据 := string(数据)
	替换1 := 全_文本.C创建文本(`<el-button  :auto-insert-space=true :round=true type='primary'  @click="跳按钮('{1}')" >{1}</el-button>`, 组件中文名) + "\r\n<!-- {1} -->"
	替换2 := 全_文本.C创建文本(`else if (组件 == "{2}") {
	路由.push({
		name: "{1}"
	})
}`, 组件英文名, 组件中文名) + "//{1}"

	基础数据 = 全_文本.T替换文本(基础数据, "<!-- {1} -->", 替换1, 1)
	基础数据 = 全_文本.T替换文本(基础数据, "//{1}", 替换2, 1)

	return 全_文件.X写到_文件(文件路径, []byte(基础数据))

}
func 改main点go(组件英文名, 组件中文名 string) error {
	文件路径 := "./main.go"
	数据, err := 全_文件.D读入_文件(文件路径)
	if err != nil {
		return err
	}
	基础数据 := string(数据)
	替换1 := 全_文本.C创建文本(`else if 组件名=="{2}"{
		vue,错误={2}(表)
		vue路径="go{1}"

	}`, 组件英文名, 组件中文名) + "//{1}"
	基础数据 = 全_文本.T替换文本(基础数据, "//{1}", 替换1, 1)
	return 全_文件.X写到_文件(文件路径, []byte(基础数据))

}
